#include <stdio.h>
#include <stdlib.h>

#define STRSIZE 30

int main()
{
	// 定义：print("%[修饰符]<格式字符>",[输出表项])
	char ch = 65;
	
	printf("ch = %d\n",ch);
	printf("ch = %c\n",ch);

	printf("-------------------\n");
	int a = 125;
	printf("a = %d\n",a);	// 省略修饰符，按照原内容输出
	printf("a = %2d\n",a);	// 修饰符长度小于实际数据长度，修饰符会失效	
	printf("a = %4d\n",a);	// 数据长度为3，修饰符长度为4，长度会被补空格
	printf("a = %8d\n",a);	// 输出内容会被补上5个空格

	printf("-------------------\n");
	float b = 123.456789;
	printf("b = %8f\n",b);		// 8不会作用于精度部分，但是123前面会补上5个空格
	printf("b = %8.1f\n",b);	// 8.1，表示整数部分会有8个位置，精度保留1位
	printf("b = %8.3f\n",b);	// 8.3与8.1同理
	printf("b = %8.8f\n",b);	// 精度部分会保留8位，但是float数属于一个近似数，所以会与定义的值出现差异
	
	printf("-------------------\n");
	char str[STRSIZE] = "HELLOWORD";
	printf("-------------------\n");
	printf("str = %.5s\n",str);				// 保留前5位字符
	printf("str = %10.5s\n",str);			// 保留5位字符，并有左边补上5个空格，凑齐10个
	printf("str = %-10.5s [over]\n",str);	// 补5空格的位置在字符的右边

	printf("-------------------\n");
	int x = 255;
	printf("x = %x\n",x);	// 十六进制的形式输出255 -->ff
	printf("x = %#x\n",x);	// 补齐前面十六进制数前面的 0x
	printf("x = %o\n",x);	// 八进制形式 不带前缀
	printf("x = %#o\n",x);	// 八进制形式 带前缀

	printf("-------------------\n");
	double du = 9.24597821005;
	long long ll = 2364874514589715;
	printf("du = %lf\n",du);
	printf("ll = %lld\n",ll);
	
	// 分别输出函数名称和函数所在行数
	// \n 具有刷新缓冲区的作用，如果程序进入死循环，没有\n，则日志不会输出
	printf("%s --> %d \n",__FUNCTION__,__LINE__);
	sleep(3);
	printf("%s --> %d \n",__FUNCTION__,__LINE__);

	exit(0);
}



















